﻿using System;
using System.Collections;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;
using CC;

namespace RFMS
{
    public partial class AdminScherm : Form
    {
        public AdminScherm()
        {
            InitializeComponent();
            //FormBorderStyle = FormBorderStyle.None;
            //WindowState = FormWindowState.Maximized;
            //TopMost = true;
        }

        public AdminScherm(BestellingOpnemen bestellingOpnemen)
        {
            //FormBorderStyle = FormBorderStyle.None;
            //WindowState = FormWindowState.Maximized;
            //TopMost = true;
            this.bestellingOpnemen = bestellingOpnemen;
            InitializeComponent();
        }

        private PictureBox pictureBox;
        private WerknemerBeheer werknemerBeheer;
        private SubcategorieBeheer subCategorieBeheer;
        private CategorieBeheer categorieBeheer;
        private ArtikelBeheer artikelBeheer;
        private ReservatieBeheer reservatieBeheer;
        private string _gebruikersNaam;
        Point pointMouse = new Point();
        Control ctrlMoved = new Control();
        private bool bMoving = false;
        private bool wijzigen = false;
        private List<List<string>> producten;
        private List<List<string>> categorieen;
        private List<List<string>> subcategorieen;
        private OrderBeheer _orderBeheer;
        private TafelBeheer _tafelBeheer;
        private int orderRegelId;
        private string tafelnaam = "";

        private void tabControl1_SelectedIndexChanged(object sender, EventArgs e)
        {
            switch (tabControl1.SelectedIndex)
            {
                //Gebruikers
                case 0:
                    wijzigen = true;
                    LaadWerknemers();
                    break;
                //Tafels
                case 1:
                    LaadTafelOverzicht();
                    break;
                //Categorie
                case 2:
                    wijzigen = true;
                    LaadCategorieen();
                    break;
                //Subcategorie
                case 3:
                    wijzigen = true;
                    LaadSubcategorieen();
                    LaadAlleCateogorieen();
                    break;
                //Producten
                case 4:
                    wijzigen = true;
                    LaadProducten();
                    List<List<string>> gegevens;
                    gegevens = categorieBeheer.LijstVanCategorieen();
                    comboBoxProductCreerenCategorie.Items.Clear();
                    comboBoxProductWijzigenCategorie.Items.Clear();
                    foreach (var g in gegevens)
                    {
                        comboBoxProductCreerenCategorie.Items.Add(g[1]);
                        comboBoxProductWijzigenCategorie.Items.Add(g[1]);
                    }

                    if (comboBoxProductCreerenCategorie.Items.Count > 0 && comboBoxProductWijzigenCategorie.Items.Count>0)
                    {
                        comboBoxProductCreerenCategorie.SelectedIndex = 0;
                        comboBoxProductWijzigenCategorie.SelectedIndex = 0;
                        LaadSubcategorie();
                    }

                    break;
                //order beheer
                case 5:
                    wijzigen = true;
                    LaadTafels();
                    LaadCategorieenOrderWijzigen();
                    break;
                case 6:
                    wijzigen = true;
                    LaadReservaties();
                    LaadReservatieTafels();
                    break;
            }
        }

        

        private void AdminScherm_Load(object sender, EventArgs e)
        {
            werknemerBeheer = new WerknemerBeheer();
            subCategorieBeheer = new SubcategorieBeheer();
            categorieBeheer = new CategorieBeheer();
            artikelBeheer = new ArtikelBeheer();
            _tafelBeheer = new TafelBeheer();
            _orderBeheer = new OrderBeheer();
            reservatieBeheer = new ReservatieBeheer();
            LaadWerknemers();
            textBoxGebruikerAanmakenwachtwoord.PasswordChar = '*';
            textBoxGebruikerAanmakenwachtwoord.MaxLength = 4;
        }

        #region Gebruikerbeheer
        //Tabblad gebruikerbeheer
        private void LaadWerknemers()
        {
            gridview_GebruikerBeheer.Rows.Clear();
            List<List<string>> werknemers = werknemerBeheer.LijstVanWerknemers();
            foreach (var w in werknemers)
            {
                string[] row = new string[] { w[1].ToString(), w[2].ToString(), w[3].ToString() };
                gridview_GebruikerBeheer.Rows.Add(row);
            }
        }

        public void LaadTafels()
        {
            TafelBeheer tafelBeheer = new TafelBeheer();
            dataGridViewOrderRegelWijzigen.Rows.Clear();
            comboBoxOrderWijzigenTafel.Items.Clear();
            List<List<string>> tafels = tafelBeheer.LijstVanTafels();
            foreach (var w in tafels)
            {
                comboBoxOrderWijzigenTafel.Items.Add(w[1]);
            }
            if (comboBoxOrderWijzigenTafel.SelectedIndex > 0)
            {
                comboBoxOrderWijzigenTafel.SelectedIndex = 0;
            }
            
        }

        private void LaadCategorieenOrderWijzigen()
        {
            categorieen = categorieBeheer.LijstVanCategorieen();
            foreach (var c in categorieen)
            {
                comboBoxCategorieProductWijzigen.Items.Add(c[1]);
            }
        }

        private void buttonGebruikerAanmaken_Click(object sender, EventArgs e)
        {
            bool actief = false;
            werknemerBeheer = new WerknemerBeheer();
            var lijstMedewerkers = werknemerBeheer.LijstVanWerknemers();
            for (int j = 0; j < lijstMedewerkers.Count; j++)
            {
                if (lijstMedewerkers[j][1] == textBoxGebruikeraanmakenNaam.Text)
                {
                    actief = true;
                    label43.Text = @"Gebruiker bestaat al";
                }
            }
            if (!actief)
            {
                try
                {
                    werknemerBeheer.Toevoegen(textBoxGebruikeraanmakenNaam.Text, textBoxGebruikerAanmakenwachtwoord.Text, comboBoxGebruikerAanmakenfunctie.SelectedItem.ToString());
                    label43.Text = @"Gebruiker aangemaakt";
                    wijzigen = true;
                    LaadWerknemers();
                }
                catch (Exception)
                {
                    label43.Text = @"Vul de juiste gegevens in";
                }
                
            }
        }

        private void buttonGebruikerWijzigen_Click(object sender, EventArgs e)
        {
            werknemerBeheer = new WerknemerBeheer();
            werknemerBeheer.Wijzigen(textBoxGebruikerWijzigenNaam.Text, textBoxGebruikerWijzigenWachtwoord.Text, comboBoxGebruikerWijzigenFunctie.SelectedItem.ToString(), textBoxGebruikerWijzigenNieuweNaam.Text);
            wijzigen = true;
            LaadWerknemers();
        }

        private void buttonGebruikerVerwijderen_Click(object sender, EventArgs e)
        {
            werknemerBeheer = new WerknemerBeheer();
            werknemerBeheer.Verwijderen(textBoxGebruikerVerwijderenNaam.Text);
            wijzigen = true;
            LaadWerknemers();
        }

        private void gridview_GebruikerBeheer_SelectionChanged(object sender, EventArgs e)
        {
            if (!wijzigen)
            {
                _gebruikersNaam = Convert.ToString(gridview_GebruikerBeheer.SelectedRows[0].Cells[0].Value);
                textBoxGebruikerWijzigenWachtwoord.Text = Convert.ToString(gridview_GebruikerBeheer.SelectedRows[0].Cells[1].Value);
                textBoxGebruikerWijzigenNaam.Text = _gebruikersNaam;
                textBoxGebruikerVerwijderenNaam.Text = _gebruikersNaam;
                comboBoxGebruikerWijzigenFunctie.SelectedIndex = comboBoxGebruikerWijzigenFunctie.FindStringExact(Convert.ToString(gridview_GebruikerBeheer.SelectedRows[0].Cells[2].Value));
            }

            else
            {
                textBoxGebruikerWijzigenNieuweNaam.Text = "";
                wijzigen = false;
            }
        }
        #endregion

        #region Plattegrondbeheer
        //Tabblad plattegrondbeheer
        void pictureBox_MouseDown(object sender, MouseEventArgs e)
        {
            ctrlMoved = (Control)sender;
            l_tafelnaamadmin.Text = ctrlMoved.Name;
            if (e.Button != MouseButtons.Left)
            {
                return;
            }
            pointMouse = e.Location;
            bMoving = true;
        }

        private void tabPage2_MouseDown(object sender, MouseEventArgs e)
        {
            if (!bMoving || e.Button != MouseButtons.Left)
            {
                return;
            }
            ctrlMoved.Left = e.X - pointMouse.X;
            ctrlMoved.Top = e.Y - pointMouse.Y;
        }

        private void tabPage2_MouseUp(object sender, MouseEventArgs e)
        {
            bMoving = false;
        }

        List<string> _tafelNaam = new List<string>();
        private BestellingOpnemen bestellingOpnemen;
        private void buttonVoegTafelToe_Click(object sender, EventArgs e)
        {
            bool actief = false;
            var tafels = _tafelBeheer.LijstVanTafels();
            foreach (var tafel in tafels)
            {
                if (tafel[1] == textBoxTafelNaam.Text)
                {
                    MessageBox.Show(@"Tafel naam bestaat al");
                    actief = true;
                }
            }
            foreach (string t in _tafelNaam)
            {
                if (t == textBoxTafelNaam.Text)
                {
                    MessageBox.Show(@"Tafel naam bestaat al");
                    actief = true;
                }
            }
            while (!actief)
            {
                if (textBoxTafelNaam.Text != "")
                {
                    pictureBox = new PictureBox();
                    pictureBox.Name = textBoxTafelNaam.Text;
                    tafelnaam = textBoxTafelNaam.Text;
                    pictureBox.Cursor = Cursors.Hand;
                    //i++;
                    pictureBox.MouseDown += (pictureBox_MouseDown);
                    pictureBox.Width = 95;
                    pictureBox.Height = 100;
                    pictureBox.Image = Image.FromFile("stoeltafel1.png");
                    PlattegrondTab.Controls.Add(pictureBox);
                }
                else
                {
                    MessageBox.Show(@"Vul een naam in!");
                }
                actief = true;
                _tafelNaam.Add(textBoxTafelNaam.Text);
            }
        }
        

        private void buttonBevestigIndeling_Click(object sender, EventArgs e)
        {
            _tafelNaam = new List<string>();
            var tafels = _tafelBeheer.LijstVanTafels();

            foreach (Control pictureBox in PlattegrondTab.Controls)
            {
                bool actief = false;
                if (pictureBox is PictureBox)
                {
                    for (int k = 0; k < tafels.Count; k++)
                    {
                        if (pictureBox.Name == tafels[k][1])
                        {
                            //bewerkt = true;
                            actief = true;
                            _tafelBeheer.Wijzigen(pictureBox.Name, pictureBox.Location.X, pictureBox.Location.Y);
                        }
                    }
                    //if (!actief)
                    //{
                    //    bewerkt = true;
                    //    _tafelBeheer.Toevoegen(pictureBox.Name, pictureBox.Location.X, pictureBox.Location.Y);
                    //}
                    if (!actief)
                    {
                        _tafelBeheer.Toevoegen(pictureBox.Name, pictureBox.Location.X, pictureBox.Location.Y);
                    }
                }
            }
        }

        private void LaadTafelOverzicht()
        {
            ArrayList list = new ArrayList(PlattegrondTab.Controls);

            foreach (Control c in list)
            {
                if (c is PictureBox)
                {
                    this.Controls.Remove(c);
                    c.Dispose();
                }
            }
                
                
            
            List<List<string>> lijst = _tafelBeheer.LijstVanTafels();
            PictureBox pictureBox;

            foreach (List<string> s in lijst)
            {
                Point point = new Point(Convert.ToInt32(s[2]), Convert.ToInt32(s[3]));
                pictureBox = new PictureBox();
                pictureBox.Location = point;
                pictureBox.Name = s[1];
                pictureBox.Cursor = Cursors.Hand;
                pictureBox.MouseDown += new MouseEventHandler(pictureBox_MouseDown);
                pictureBox.Width = 95;
                pictureBox.Height = 100;
                pictureBox.Location = new Point(Convert.ToInt32(s[2]), Convert.ToInt32(s[3]));
                pictureBox.Image = Image.FromFile("stoeltafel1.png");
                PlattegrondTab.Controls.Add(pictureBox);
            }
        }
        #endregion

        #region Productbeheer
        //Tabblad productbeheer
        private void buttonProductAanmaken_Click(object sender, EventArgs e)
        {
            bool actief = false;
            var lijstVanAlleArtikelen = artikelBeheer.LijstVanAlleProducten();
            for (int j = 0; j < lijstVanAlleArtikelen.Count; j++)
            {
                if (lijstVanAlleArtikelen[j][1] == textBoxProductCreerenNaam.Text && lijstVanAlleArtikelen[j][2] == "False")
                {
                    artikelBeheer.ArtikelActiveren(textBoxProductCreerenNaam.Text, true);
                    label46.Text = @"product toegevoegd";
                    actief = true;
                    wijzigen = true;
                    LaadProducten();
                }
                if (lijstVanAlleArtikelen[j][1] == textBoxProductCreerenNaam.Text && lijstVanAlleArtikelen[j][2] == "True")
                {
                    label46.Text = @"Product bestaat al";
                    actief = true;
                }
            }
            if (!actief)
            {
                if (textBoxProductCreerenNaam.Text != "")
                {
                    artikelBeheer.Toevoegen(textBoxProductCreerenNaam.Text, Convert.ToDouble(numericUpDownProductCreerenPrijs.Value), Convert.ToInt32(numericUpDownProductCreerenBtw.Value), comboBoxProductCreerenSubCategorie.SelectedItem.ToString());
                    wijzigen = true;
                    label46.Text = @"SubCategorie toegevoegd";
                    LaadProducten();
                }
                else
                {
                    label46.Text = @"Vul product naam in";
                }
            }
        }

        private void buttonProductWijzigen_Click(object sender, EventArgs e)
        {
            label1.Text = @"";
            try
            {
                artikelBeheer.Wijzigen(textBoxProductWijzigenNaam.Text, textboxproductnieuwenaam.Text, comboBoxProductWijzigenSubCategorie.SelectedItem.ToString(), Convert.ToDouble(numericUpDownProductWijzigenPrijs.Value), Convert.ToInt32(numericUpDownProductWijzigenBtw.Value));
                wijzigen = true;
                LaadProducten();
            }
            catch (Exception)
            {
                label1.Text = @"Controleer invoer";
            }
        }

        private void buttonProductVerwijderen_Click(object sender, EventArgs e)
        {
            artikelBeheer.Verwijderen(textBoxProductVerwijderen.Text);
            wijzigen = true;
            LaadProducten();
        }

        private void gridView_ProductBeheer__SelectionChanged(object sender, EventArgs e)
        {
            label1.Text = @"";
            if (!wijzigen)
            {
                string productNaam = Convert.ToString(gridView_ProductBeheer.SelectedRows[0].Cells[0].Value);
                textBoxProductWijzigenNaam.Text = productNaam;
                textBoxProductVerwijderen.Text = productNaam;
                comboBoxProductWijzigenCategorie.SelectedIndex = comboBoxProductWijzigenCategorie.FindStringExact(Convert.ToString(gridView_ProductBeheer.SelectedRows[0].Cells[2].Value));
                comboBoxProductWijzigenSubCategorie.SelectedIndex = comboBoxProductWijzigenSubCategorie.FindStringExact(Convert.ToString(gridView_ProductBeheer.SelectedRows[0].Cells[3].Value));
                numericUpDownProductWijzigenPrijs.Value = Convert.ToDecimal(gridView_ProductBeheer.SelectedRows[0].Cells[1].Value);
                numericUpDownProductWijzigenBtw.Value = Convert.ToDecimal(gridView_ProductBeheer.SelectedRows[0].Cells[4].Value);
            }

            else
            {
                wijzigen = false;
            }

        }

        private void LaadAlleCateogorieen()
        {
            List<List<string>> cats = categorieBeheer.LijstVanCategorieen();
            comboBoxSubcategorieCreeerenCategorie.Items.Clear();
            comboBoxSubcategorieWijzigenCategorie.Items.Clear();
            foreach (var c in cats)
            {
                comboBoxSubcategorieCreeerenCategorie.Items.Add(c[1]);
                comboBoxSubcategorieWijzigenCategorie.Items.Add(c[1]);
            }
            if (comboBoxSubcategorieCreeerenCategorie.Text != "")
            {
                comboBoxSubcategorieCreeerenCategorie.SelectedIndex = 0;
                comboBoxSubcategorieWijzigenCategorie.SelectedIndex = 0;
            }
        }

        private void LaadSubcategorieen()
        {
            dataGridViewSubCategorieBeheer.Rows.Clear();
            subcategorieen = subCategorieBeheer.LijstVanSubcategorieen();
            foreach (var c in subcategorieen)
            {
                string[] row = new string[] { c[1], c[2] };
                dataGridViewSubCategorieBeheer.Rows.Add(row);
            }
        }

        private void LaadCategorieen()
        {
            gridViewCategorieBeheer.Rows.Clear();
            categorieen = categorieBeheer.LijstVanCategorieen();
            foreach (var c in categorieen)
            {
                string[] row = new string[] { c[1], c[2] };
                gridViewCategorieBeheer.Rows.Add(row);
            }
        }

        private void LaadProducten()
        {
            gridView_ProductBeheer.Rows.Clear();
            producten = artikelBeheer.LijstVanProducten();
            foreach (var p in producten)
            {
                string[] row = new string[] { p[1].ToString(), p[2].ToString(), p[4], p[5], p[3].ToString() };
                gridView_ProductBeheer.Rows.Add(row);
            }
        }

        private void LaadSubcategorie()
        {
            List<List<string>> gegevens;
            gegevens = subCategorieBeheer.LijstVanSubcategorieen(comboBoxProductCreerenCategorie.SelectedItem.ToString());
            comboBoxProductCreerenSubCategorie.Items.Clear();
            comboBoxProductWijzigenSubCategorie.Items.Clear();

            foreach (var g in gegevens)
            {
                comboBoxProductCreerenSubCategorie.Items.Add(g[1]);
                comboBoxProductWijzigenSubCategorie.Items.Add(g[1]);
            }


            if (comboBoxProductCreerenSubCategorie.Items.Count> 0 && comboBoxProductWijzigenSubCategorie.Items.Count>0)
            {
                comboBoxProductCreerenSubCategorie.SelectedIndex = 0;
                comboBoxProductWijzigenSubCategorie.SelectedIndex = 0;
            }
        }

        private void comboBoxProductCreerenCategorie_SelectedIndexChanged(object sender, EventArgs e)
        {
            LaadSubcategorie();
        }

        private void comboBoxProductwijzigen_SelectedIndexChanged(object sender, EventArgs e)
        {
            textBoxproductwijzigen.Text = comboBoxProductwijzigen.SelectedItem.ToString();
        }

        private void comboBoxCategorieProductWijzigen_SelectedIndexChanged(object sender, EventArgs e)
        {
            LaadSubcategorieOrderWijzigen();
        }

        private void LaadSubcategorieOrderWijzigen()
        {
            List<List<string>> gegevens;
            gegevens = subCategorieBeheer.LijstVanSubcategorieen(comboBoxCategorieProductWijzigen.SelectedItem.ToString());
            comboBoxSubcategorieProductWijzgen.Items.Clear();

            foreach (var g in gegevens)
            {
                comboBoxSubcategorieProductWijzgen.Items.Add(g[1]);
            }

            if (comboBoxSubcategorieProductWijzgen.Text != "")
            {
                comboBoxSubcategorieProductWijzgen.SelectedIndex = 0;
            }
        }

        private void comboBoxSubcategorieProductWijzgen_SelectedIndexChanged(object sender, EventArgs e)
        {
            LaadProductOrderWijzigen();
        }

        private void LaadProductOrderWijzigen()
        {
            List<List<string>> gegevens;
            gegevens = artikelBeheer.LijstVanProducten(comboBoxSubcategorieProductWijzgen.SelectedItem.ToString());
            comboBoxProductwijzigen.Items.Clear();

            foreach (var g in gegevens)
            {
                comboBoxProductwijzigen.Items.Add(g[1]);
            }

            if (comboBoxProductwijzigen.Text != "")
            {
                comboBoxProductwijzigen.SelectedIndex = 0;
            }
        }
        #endregion

        #region Categoriebeheer
        //Tabblad categoriebeheer
        private void gridViewCategorieBeheer_SelectionChanged(object sender, EventArgs e)
        {
            if (!wijzigen)
            {
                string catNaam = Convert.ToString(gridViewCategorieBeheer.SelectedRows[0].Cells[0].Value);
                textBoxCategorieWijzigenNaam.Text = catNaam;
                textBoxCategorieVerwijderenNaam.Text = catNaam;
                comboBoxcategorienieuwelocatie.SelectedIndex = comboBoxcategorienieuwelocatie.FindStringExact(Convert.ToString(gridViewCategorieBeheer.SelectedRows[0].Cells[1].Value));
            }

            else
            {
                wijzigen = false;
            }
        }

        private void buttonCategorieAanmaken_Click(object sender, EventArgs e)
        {
            bool actief = false;
            var lijstVanAlleCategorien = categorieBeheer.LijstVanAlleCategorieen();
            for (int j = 0; j < lijstVanAlleCategorien.Count; j++)
            {
                if (lijstVanAlleCategorien[j][1] == textBoxCategorieAanmakenNaam.Text && lijstVanAlleCategorien[j][3] == "False")
                {
                    categorieBeheer.CategorieActiveren(textBoxCategorieAanmakenNaam.Text, true);
                    label44.Text = @"Categorie toegevoegd";
                    actief = true;
                    wijzigen = true;
                    LaadCategorieen();
                }
                if (lijstVanAlleCategorien[j][1] == textBoxCategorieAanmakenNaam.Text && lijstVanAlleCategorien[j][3] == "True")
                {
                    label44.Text = @"Categorie bestaat al";
                    actief = true;
                }
            }
            if (!actief)
            {
                try
                {
                    if (textBoxCategorieAanmakenNaam.Text != "")
                    {
                        categorieBeheer.Toevoegen(textBoxCategorieAanmakenNaam.Text,
                                                  comboBoxcategorielocatie.SelectedItem.ToString());
                        wijzigen = true;
                        label44.Text = @"Categorie toegevoegd";
                        LaadCategorieen();
                    }
                    else
                    {
                        label44.Text = @"Controleer invoer";
                    }
                }
                catch(Exception)
                {
                    label44.Text = @"Selecteer een categorie";
                }
            }
        }

        private void buttonCategorieWijzigen_Click(object sender, EventArgs e)
        {
            try
            {
                categorieBeheer.AanpassenNaam(textBoxCategorieWijzigenNaam.Text, textBoxCategorieWijzigenNieuweNaam.Text, comboBoxcategorienieuwelocatie.SelectedItem.ToString());
                textBoxCategorieWijzigenNieuweNaam.Text = "";
                wijzigen = true;
                LaadCategorieen();
            }
            catch (Exception)
            {
                label44.Text = @"Controleer invoer";
            }
            
        }

        private void buttonCategorieVerwijderen_Click(object sender, EventArgs e)
        {
            categorieBeheer.Verwijderen(textBoxCategorieVerwijderenNaam.Text);
            wijzigen = true;
            LaadCategorieen();
        }

        private void dataGridViewSubCategorieBeheer_SelectionChanged(object sender, EventArgs e)
        {
            if (!wijzigen)
            {
                string subcatNaam = Convert.ToString(dataGridViewSubCategorieBeheer.SelectedRows[0].Cells[0].Value);
                textBoxSubcategorieWijzigenNaam.Text = subcatNaam;
                textBoxSubcategorieVerwijderenNaam.Text = subcatNaam;
                comboBoxSubcategorieWijzigenCategorie.SelectedIndex = comboBoxSubcategorieWijzigenCategorie.FindStringExact(dataGridViewSubCategorieBeheer.SelectedRows[0].Cells[1].Value.ToString());
            }

            else
            {
                textBoxSubcategorieWijzigenNieuweNaam.Text = "";
                wijzigen = false;
            }
        }
        #endregion

        #region Subcategoriebeheer
        //Tabblad subcategoriebeheer
        private void buttonSubcategorieAanmaken_Click(object sender, EventArgs e)
        {
            bool actief = false;
            var lijstVanSubAlleCategorien = subCategorieBeheer.LijstVanAlleSubCategorieen();
            for (int j = 0; j < lijstVanSubAlleCategorien.Count; j++)
            {
                if (lijstVanSubAlleCategorien[j][1] == textBoxSubcategorieCreeerenNaam.Text && lijstVanSubAlleCategorien[j][2] == "False")
                {
                    subCategorieBeheer.SubCategorieActiveren(textBoxSubcategorieCreeerenNaam.Text, true);
                    label45.Text = @"SubCategorie toegevoegd";
                    actief = true;
                    wijzigen = true;
                    LaadSubcategorieen();
                }
                if (lijstVanSubAlleCategorien[j][1] == textBoxSubcategorieCreeerenNaam.Text && lijstVanSubAlleCategorien[j][2] == "True")
                {
                    label45.Text = @"SubCategorie bestaat al";
                    actief = true;
                }
            }
            if (!actief)
            {
                try
                {
                    if (textBoxSubcategorieCreeerenNaam.Text != "")
                    {
                        subCategorieBeheer.Toevoegen(textBoxSubcategorieCreeerenNaam.Text,
                                                     comboBoxSubcategorieCreeerenCategorie.SelectedItem.ToString());
                        wijzigen = true;
                        label45.Text = @"SubCategorie toegevoegd";
                        LaadSubcategorieen();
                    }
                    else
                    {
                        label45.Text = @"Controleer invoer";
                    }
                }
                catch (Exception)
                {
                    label45.Text = @"Selecteer een categorie";
                }
            }
            
        }

        private void buttonSubcategorieWijzigen_Click(object sender, EventArgs e)
        {
            label45.Text = @"...";
            try
            {
                subCategorieBeheer.Aanpassen(textBoxSubcategorieWijzigenNaam.Text, textBoxSubcategorieWijzigenNieuweNaam.Text, comboBoxSubcategorieWijzigenCategorie.SelectedItem.ToString());
                wijzigen = true;
                LaadSubcategorieen();
            }
            catch (Exception)
            {
                label45.Text = @"Controleer invoer";
            }
        }

        private void buttonSubcategorieVerwijderen_Click(object sender, EventArgs e)
        {
            subCategorieBeheer.Verwijderen(textBoxSubcategorieVerwijderenNaam.Text);
            wijzigen = true;
            LaadSubcategorieen();
        }
        #endregion

        #region OrderBeheer
        private void buttonOrderregelAanpassen_Click(object sender, EventArgs e)
        {
            try
            {
                _orderBeheer.OrderCorrigeren(orderRegelId, Convert.ToInt32(numericUpDownOrderWijzigen.Value), comboBoxOrderWijzigenTafel.SelectedItem.ToString());
                laadOrders();
            }
            catch (Exception)
            {
                label47.Text = @"Controleer invoer";
            }
        }

        private void buttonOrderBeheerProductWijzigen_Click(object sender, EventArgs e)
        {
            try
            {
                _orderBeheer.OrderCorrigeren(orderRegelId, comboBoxOrderWijzigenTafel.SelectedItem.ToString(), comboBoxProductwijzigen.SelectedItem.ToString());
                laadOrders();
            }
            catch (Exception)
            {
                label47.Text = @"Controleer invoer";
            }
        }

        private void laadOrders()
        {
            wijzigen = true;
            dataGridViewOrderRegelWijzigen.Rows.Clear();

            List<List<string>> orderRegels = _orderBeheer.LijstVanOrders(comboBoxOrderWijzigenTafel.SelectedItem.ToString());
            foreach (var w in orderRegels)
            {
                string[] row = new string[] {w[0].ToString(), w[3].ToString(), w[1].ToString() };
                dataGridViewOrderRegelWijzigen.Rows.Add(row);
            }
        }

        private void comboBoxOrderWijzigenTafel_SelectedIndexChanged(object sender, EventArgs e)
        {
            laadOrders();
        }

        private void dataGridViewOrderRegelWijzigen_SelectionChanged(object sender, EventArgs e)
        {
            if (!wijzigen)
            {
                orderRegelId = Convert.ToInt32(dataGridViewOrderRegelWijzigen.SelectedRows[0].Cells[0].Value);
                textBoxproductwijzigen.Text = Convert.ToString(dataGridViewOrderRegelWijzigen.SelectedRows[0].Cells[1].Value);
                numericUpDownOrderWijzigen.Value = Convert.ToDecimal(dataGridViewOrderRegelWijzigen.SelectedRows[0].Cells[2].Value);
            }

            else
            {
                wijzigen = false;
            }
        }      
        #endregion

        private void AdminScherm_KeyDown(object sender, KeyEventArgs e)
        {
            if (e.KeyCode == Keys.Escape)
            {
                this.Close();
            }
        }

        private void AdminScherm_FormClosing(object sender, FormClosingEventArgs e)
        {
            if (bestellingOpnemen != null){bestellingOpnemen.LaadFormGegevens();}
        }

        private void b_Reservatietoevoegen_Click(object sender, EventArgs e)
        {
            reservatieBeheer.ReservatieToevoegen(c_reservatieTafelToevoegen.SelectedItem.ToString(), date_reservatieDatum.Value, t_reservatieKlantnaam.Text);
            LaadReservaties();
        }

        private void LaadReservatieTafels()
        {
            grid_reservatie.Rows.Clear();
            List<List<string>> tafels = _tafelBeheer.LijstVanTafels();
            foreach (var w in tafels)
            {
                c_reservatieTafelToevoegen.Items.Add(w[1]);
                comboBox1.Items.Add(w[1]);
            }
            if (c_reservatieTafelToevoegen.SelectedIndex > 0)
            {
                c_reservatieTafelToevoegen.SelectedIndex = 0;
            }
            if (comboBox1.SelectedIndex > 0)
            {
                comboBox1.SelectedIndex = 0;
            }
        }

        private void LaadReservaties()
        {
            grid_reservatie.Rows.Clear();
            var reservaties = reservatieBeheer.ReservatieOphalen();
            foreach (var r in reservaties)
            {
                object[] row = new object[] { r[1], r[2], r[3] };
                grid_reservatie.Rows.Add(row);
            }
        }

        private void b_reservatieVerwijderen_Click(object sender, EventArgs e)
        {
            reservatieBeheer.ReservatieVerwijderen(textBox1.Text, textBox3.Text);
        }

        private void grid_reservatie_SelectionChanged(object sender, EventArgs e)
        {
            try
            {
                textBox1.Text = grid_reservatie.SelectedRows[0].Cells[0].Value.ToString();
                textBox2.Text = grid_reservatie.SelectedRows[0].Cells[1].Value.ToString();
                textBox3.Text = grid_reservatie.SelectedRows[0].Cells[2].Value.ToString();
            }
            catch (Exception)
            {
                return;
            }
        }

        private void button1_Click(object sender, EventArgs e)
        {
            grid_reservatie.Rows.Clear();
            List<List<object>> reservatie = new List<List<object>>();
            if (checkBox1.Checked)
            {
                reservatie = reservatieBeheer.ReservatieOphalen(dateTimePicker1.Value);
            }
            if (checkBox2.Checked)
            {
                reservatie = reservatieBeheer.ReservatieOphalen(comboBox1.SelectedItem.ToString());
            }
            if (checkBox1.Checked && checkBox2.Checked)
            {
                reservatie = reservatieBeheer.ReservatieOphalen(comboBox1.SelectedItem.ToString(), dateTimePicker1.Value);
            }
            else
            {
                reservatie = reservatieBeheer.ReservatieOphalen();
            }

            foreach (var r in reservatie)
            {
                object[] row = new object[] { r[1], r[2], r[3] };
                grid_reservatie.Rows.Add(row);
            }
        }
    }
}
